/*
 *
 *  Copyright (C) 2012-2024
 *  All rights reserved, Designed By 杭州连线客信息技术有限公司
 *  注意：
 *  本软件为杭州连线客信息技术有限公司开发研制，未经购买不得使用
 *  购买后可获得全部源代码（禁止转卖、分享、上传到码云、github等开源平台）
 *  一经发现盗用、分享等行为，将追究法律责任，后果自负
 *
 */

package org.dromara.setting.service;

import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.setting.domain.bo.SettingConfigItemBo;
import org.dromara.setting.domain.vo.*;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 配置项Service接口
 *
 * @author LXK-RY5
 * @date 2024-08-10
 */
public interface ISettingConfigItemService {

    /**
     * 是否存在key
     *
     * @param groupId
     * @param key
     * @return
     */
    boolean existByKey(Long groupId, String key);

    SettingConfigItemVo queryByGroupIdAndKey(Long groupId, String key);

    SettingConfigItemVo queryByKey(String key);

    /**
     * 查询IdList配置项Map
     */
    Map<Long, SettingConfigItemVo> queryMapByIdList(List<Long> idList);

    /**
     * 配置项ListVo转Map
     */
    default Map<Long, SettingConfigItemVo> convertToMap(List<SettingConfigItemVo> list) {
        return list.stream().collect(Collectors.toMap(SettingConfigItemVo::getId, v -> v));
    }

    /**
     * 查询配置项Map
     */
    Map<Long, SettingConfigItemVo> queryMap(SettingConfigItemBo bo);


    /**
     * 查询配置项IdList
     */
    List<SettingConfigItemVo> queryByIdList(List<Long> idList);

    /**
     * 查询配置项
     *
     * @param id 主键
     * @return 配置项
     */
    SettingConfigItemVo queryById(Long id);

    /**
     * 分页查询配置项列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 配置项分页列表
     */
    TableDataInfo<SettingConfigItemVo> queryPageList(SettingConfigItemBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的配置项列表
     *
     * @param bo 查询条件
     * @return 配置项列表
     */
    List<SettingConfigItemVo> queryList(SettingConfigItemBo bo);

    /**
     * 新增配置项
     *
     * @param bo 配置项
     * @return 是否新增成功
     */
    Boolean insertByBo(SettingConfigItemBo bo);

    /**
     * 修改配置项
     *
     * @param bo 配置项
     * @return 是否修改成功
     */
    Boolean updateByBo(SettingConfigItemBo bo);

    /**
     * 校验并批量删除配置项信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 查询微信公众号配置项
     */
    ChannelOaVo wxMpDetail();

    /**
     * 查询微信小程序配置项
     */
    ChannelMpVo wxMiniDetail();

    /**
     * 批量修改配置项
     *
     * @param bo 修改参数
     */
    Boolean bulkEdit(List<SettingConfigItemBo> bo);

    /**
     * 余额支付配置组
     */
    ChannelYueVo yueDetail();

    /**
     * 支付宝支付配置组
     */
    ChannelAllVo allDetail();

    /**
     * 微信支付配置组
     */
    ChannelWXPayVo wxPayDetail();

    /**
     * 协议
     */
    AgreementVo userAgreement();

    /**
     * 更具项目组key和项目项key查询配置项
     *
     * @param key1     项目组key
     * @param key2     项目项key
     */
    SettingConfigItemVo selectValueByKey(String key1, String key2);

    /**
     * 修改支付配置方式状态
     *
     * @param id 配置组id
     * @return
     */
    Boolean payIsShow(Long id);

    /**
     * 查询连线客openApi配置
     *
     * @return
     */
    LxkOpenApiVo lxkOpenApiDetail();

    /**
     * 查询连线客订单配置
     *
     * @return
     */
    LxkOmsOrderVo omsOrderDetail();
}
